#ifndef _SCHEDULE_POLICY_H_
#define _SCHEDULE_POLICY_H_

/*
	class : SchedulePolicy
	desc : Creates a policy to use when scheduling
		threads/processes. This is generic
		so it can be used for anything that would need
		a scheduler given it has the right operations.
*/
template<typename Data>
class SchedulePolicy
{
	public :
		//adds data to schedule
		virtual void add(Data* data)=0; 
		//removes data from schedule completely
		virtual void remove(Data* data)=0;
		//makes data go to sleep in schedule skipping operation
		virtual void sleep(Data* data)=0;
		//wakes up data that has been sleeping re-adds to schedule
		virtual void wake(Data* data)=0; 
		//gets next data to be scheduled
		virtual Data* next()=0; //gets next
};



#endif
